linux: xenbus dev write function resets packet data on *all* error conditions.
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Fri, 2 Mar 2007 16:29:48 +0000 (16:29 +0000)
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>
Fri, 2 Mar 2007 16:29:48 +0000 (16:29 +0000)
Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_dev.c

index f9c1801e1acde9062c916602db3c0c6345e6e62b..a1e56ddb8dd7736e24d1a3c00ec12c8008d84dc8 100644 (file)
@@ -175,11 +175,15 @@ static ssize_t xenbus_dev_write(struct file *filp,
        struct watch_adapter *watch, *tmp_watch;
        int err, rc = len;
 
-       if ((len + u->len) > sizeof(u->u.buffer))
-               return -EINVAL;
+       if ((len + u->len) > sizeof(u->u.buffer)) {
+               rc = -EINVAL;
+               goto out;
+       }
 
-       if (copy_from_user(u->u.buffer + u->len, ubuf, len) != 0)
-               return -EFAULT;
+       if (copy_from_user(u->u.buffer + u->len, ubuf, len) != 0) {
+               rc = -EFAULT;
+               goto out;
+       }
 
        u->len += len;
        if ((u->len < sizeof(u->u.msg)) ||